/**
 * 定义路由，并导出一个路由实例
 */
// 路由是一个插件，就必须注册
import Vue from 'vue'
import Router from 'vue-router'

// 直接引入store
import store from '../store'

Vue.use(Router)

// 定义路由的模式，路由对象
// 引入路由组件--@是一个通配符，他表示从src目录开始
import Login from '@/pages/login'
import Home from '@/pages/home'
import Hall from '@/pages/hall'
import List from '@/pages/list'
import My from '@/pages/my'
import Sign from '@/pages/sign'

import ContSign from '@/pages/ContSign'
import Pay from '@/pages/pay'
import Real from '@/pages/real'
import Project from '@/pages/project'


// import Autonym from '@/pages/my/autonym'
import Money from '@/pages/my/money'
import Message from '@/pages/my/message'


import Deliverables from '@/pages/list/Deliverables'
import Details from '@/pages/hall/details'
import Ad from '@/pages/hall/ad'
import Bill from '@/pages/my/bill'
// 对路由进行实例化
const router = new Router({
  // 指定路由的模式--hash(default)、history
  mode: 'history',
  // 配置路由
  routes: [{
      path: '/',
      redirect: '/login'
    },
    // 因为是后台系统，所以默认到登陆页面，并且登录之后的其它页面都应该要鉴权(通用鉴权--用户是否已经登录)
    // 可以使用meta来指定一些特定的不需要鉴权的路由，其它路由不配置就表示要鉴权
    {
      path: '/login',
      component: Login,
      meta: {
        nologin: true
      }
    },
    {
      path: '/home',
      component: Home
    },
    {
      path: '/hall',
      component: Hall
    },
    {
      path: '/list',
      component: List
    },
    {
      path: '/my',
      component: My
    },
    {
      path: '/sign',
      component: Sign
    },
    {
      path: '/sign/cont',
      component: ContSign
    },
    {
      path: '/pay',
      component: Pay
    },
    {
      path: '/real',
      component: Real
    },
    {
      path: '/project',
      component: Project
    },
    {
      path: '/money',
      component: Money
    },
    {
      path: '/deliverables',
      component: Deliverables
    },
    {
      path: '/message',
      component: Message
    },
    {
      path: '/details',
      component: Details
    },
    {
      path: '/ad',
      component: Ad
    },
    {
      path: '/bill',
      component: Bill
    }
  ]
})

// 实现全局的路由访问权限拦截
router.beforeEach(function (to, from, next) {
  // 通过meta属性来判断是否需要进行鉴权
  if (to.meta.nologin) {
    next()
    return
  }
  // 表示需要鉴权，获取存储在sessionStorage中的加密数据
  let token = sessionStorage.getItem('token')
  // 判断这个数据是否存在
  if (!token) {
    next('/login')
    return
  }

  // 进行解密，校验时效性 (Date.now() - token时间戳) / 1000 / 60 / 30 表示是30分钟
  // 如果有效则表示在时效性内，进行页面跳转

  // 校验token是否正确
  // 这里的this是路由的实例，和组件的实例不是同一个事物
  // 通过引入的单例store对象来获取token数据
  let _sToken = store.getters['common/token']

  // 进行token正确性校验
  if (_sToken !== token) {
    next('/login')
    return
  }

  next()
})

export default router
